package com.itheima.reggie.service.impl;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.itheima.reggie.common.Constant;
import com.itheima.reggie.common.ResultInfo;
import com.itheima.reggie.domain.Employee;
import com.itheima.reggie.mapper.EmployeeMapper;
import com.itheima.reggie.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
//员工管理模块

@Service //业务层
@Transactional //开启事务
public class EmployeeServiceImpl implements EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;
// 登录
    @Override
    public ResultInfo login(String username, String password) {
        // 根据mapper先查询名字
        Employee employee = employeeMapper.findByUsername(username);
        // 对比账号
        if (employee == null) {
            return ResultInfo.error("没有此账号");
        }
        // 比较密码
        String md5 = SecureUtil.md5(password);// 数据库的密码是加密的 我们用把他解密变成明文
        if (!StrUtil.equals(md5, employee.getPassword())) {
            return ResultInfo.error("密码不正确");
        }
        // 在判断账号是否禁用   代码的严谨性！假如员工离职了，还能登录自己的账号，问题就很严重了！
        if (employee.getStatus() == 0) {
            return ResultInfo.error("账号被封了，联系管理员");
        }
        // 都正确就返回
        return ResultInfo.success(employee);
    }


// 查询
    @Override
    public List<Employee> findList(String name) {
       return employeeMapper.findList(name);
    }

// 新增
    @Override
    public void save(Employee employee) {
        //1.补全员工信息
        // 使用雪花的id生成器
        long id = IdUtil.getSnowflake(1, 1).nextId();
        // id
        employee.setId(id);
        // 密码 Constant.INIT_PASSWORD 是通用包commom包里面的constant类中的成员 自定义就是123456
        String md5 = SecureUtil.md5(Constant.INIT_PASSWORD);
        employee.setPassword(md5);
        // 员工的状态    Employee.STATUS_ENABLE  就相当于是1  domain包下的Employee的常量
        employee.setStatus(Employee.STATUS_ENABLE);
        // 创建人 和 修改人
     //   employee.setCreateUser(1L);//todo 暂时写死
     //   employee.setUpdateUser(1L);
     //   // 创建时间  修改时间
     //   employee.setCreateTime(new Date()); //todo 暂时写死
     //   employee.setUpdateTime(new Date());
        // 在调用mapper层的新增方法
        employeeMapper.save(employee);
    }

    // 回显
    @Override
    public Employee findByid(Long id) {
        // 调用mapper层的方法
        return employeeMapper.findByid(id);
    }

    // 修改
    @Override
    public void updateById(Employee employee) {
        // 需要补全信息  页面修改那里只有几个信息 像是修改人修改时间之类的 他都没有
     //  employee.setUpdateTime(new Date()); //todo
     //  employee.setUpdateUser(1L);

        //调用mapper修改
       employeeMapper.updateById(employee);


    }
}
